package com.starleague.battletech.unit.mech;

import com.starleague.battletech.unit.IBattletechUnitEngine;

public interface IMechEngine
        extends IBattletechUnitEngine, IMechComponent
{
    // boolean attachToMech(final IMech mech) throws BattletechException;
    // boolean dettachFromMech();// throws StarLeagueException;
}

//
// @Override
// public abstract MechEngineTemplate getTemplate();
//
// @Override
// public int getEngineRating() { return this.getTemplate().getEngineRating(); }
//
// @Override
// public Engine.TYPE getEngineTYPE() { return this.getTemplate().getEngineTYPE(); }
//
// @Override
// public String getModelName() { return this.getTemplate().getModelName(); }
//
// @Override
// public final int getCTons() { return this.getTemplate().getCTons(); }
//
// @Override
// public boolean isReroll() { return false; }
//
// @Override
// public String getCriticalSlotName() { return "MechEngine [" + this.getEngineTYPE() + "] [Rating " +
// this.getEngineRating() + "]"; }
//
// protected MechEngine() {}

// @Override
// public String toString()
// {
// return this.getName();
// }
//
// @Override
// public String getName() { return "MechEngine [" + this.getEngineTYPE() + "] [Rating " + this.getEngineRating() + "]";
// }
//
// public MechEngine(
// final battletech.Engine.TYPE i_type,
// final int i_mech_tons,
// final int i_walk_mp) throws BattletechException
// {
// super(i_type, i_mech_tons * i_walk_mp);
//
// if ((i_mech_tons % 5) != 0)
// throw new BattletechException(
// "MechDesignerEngine.ctor(): Mech tonnage [" + i_mech_tons + "] not divisible by 5");
// }
//
// public final boolean addToHitLocations(final MechHitLocation... i_hit_locations)
// {
// switch(this.getInternalStructureTYPE())
// {
// case NORMAL:
// return true;
// case ENDO_IS:
// return AddToRandomHitLocations(14, i_hit_locations);
// case ENDO_CLAN:
// return AddToRandomHitLocations(7, i_hit_locations);
// default:
// return false;
// }
// }
//
// private boolean AddToRandomHitLocations(
// final int i_num_slots,
// final HitLocation... i_hit_locations)
// {
// int slots_remaining = i_num_slots;
// for(HitLocation hit_location : i_hit_locations)
// {
// while(slots_remaining > 0)
// {
// if (!hit_location.addICriticalSlot(this, 1))
// break;
// // else
// --slots_remaining;
// }
// }
//
// if (slots_remaining > 0)
// {
// // Have to remove all added slots before returning failure
// for(HitLocation hit_location : i_hit_locations)
// {
// hit_location.removeICriticalSlot(this);
// }
// return false;
// }
// // else
// return true;
// }
//
// public final int getNumCriticalSlots(final MechHitLocation.TYPE i_mech_hit_location_type)
// {
// switch(i_mech_hit_location_type)
// {
// case CENTER_TORSO:
// return 6;
//
// case SIDE_TORSO:
// switch(getEngineTYPE())
// {
// case NORMAL:
// return 0;
// case XL_IS:
// return 3; // hard-coded to 3, sigh...
// case XL_CLAN:
// return 2; // hard-coded to 2, sigh...
// }
// return 0;
//
// default:
// return 0;
// }
// }
// }

// @Override
// public boolean IsValidHitLocationTYPE(final MechHitLocation.TYPE i_hit_location_type)
// {
// switch(i_hit_location_type)
// {
// case HEAD:
// case ARM:
// case LEG:
// return false;
// case CENTER_TORSO:
// return true;
// case SIDE_TORSO:
// switch(getTYPE())
// {
// case NORMAL:
// return false;
// case XL_IS:
// case XL_CLAN:
// return true;
// }
// }
// return false;
// }

// int num_st = 0;
// switch(getTYPE())
// {
// case NORMAL:
// break;
// case XL_IS:
// num_st = 3; // hard-coded to 3, sigh...
// break;
// case XL_CLAN:
// num_st = 2; // hard-coded to 2, sigh...
// break;
// }
//
//
//

// public MechEngine(final MechEngine.SerialData i_mech_engine_data)// throws BattletechException
// {
// super(i_mech_engine_data);
// }

// @Override
// public MechEngine.SerialData Serialize(final SerialObject.SerialManager i_sobject_manager)
// {
// return new MechEngine.SerialData(i_sobject_manager, this);
// }
//
// public static class SerialData extends Engine.SerialData
// {
// @Override
// public MechEngine Deserialize(final SerialObject.SerialManager i_sobject_manager)// throws BattletechException
// {
// return (MechEngine)i_sobject_manager.TrackSerialObject(new MechEngine(this), this);
// }
//
// SerialData(final SerialObject.SerialManager i_sobject_manager, final MechEngine i_mech_engine)
// {
// super(i_sobject_manager, i_mech_engine);
// }
// }
//
// public List<battletech.mech.MechDesign.HIT_LOCATION> getHitLocationListForCriticalSlotables()
// {
// ArrayList<battletech.mech.MechDesign.HIT_LOCATION> hit_location_list =
// new ArrayList<battletech.mech.MechDesign.HIT_LOCATION>(12); // lets be speed-efficient (vs size-efficient)
//
// for(int i = 0;i < 6;++i) // hard-coded to 6, sigh...
// hit_location_list.add(MechDesign.HIT_LOCATION.CENTER_TORSO);
//
// int num_st = 0;
// switch(getTYPE())
// {
// case NORMAL:
// break;
// case XL_IS:
// num_st = 3; // hard-coded to 3, sigh...
// break;
// case XL_CLAN:
// num_st = 2; // hard-coded to 2, sigh...
// break;
// }
//
// for(int i = 0;i < num_st;++i) // hard-coded to 6, sigh...
// {
// hit_location_list.add(MechDesign.HIT_LOCATION.LEFT_TORSO);
// hit_location_list.add(MechDesign.HIT_LOCATION.RIGHT_TORSO);
// }
//
// return hit_location_list;
// }
//
// public List<battletech.mech.MechDesign.HIT_LOCATION> getHitLocationListForCriticalSlotables()
// {
// ArrayList<battletech.mech.MechDesign.HIT_LOCATION> hit_location_list =
// new ArrayList<battletech.mech.MechDesign.HIT_LOCATION>(12); // lets be speed-efficient (vs size-efficient)
//
// for(int i = 0;i < 6;++i) // hard-coded to 6, sigh...
// hit_location_list.add(MechDesign.HIT_LOCATION.CENTER_TORSO);
//
// int num_st = 0;
// switch(getTYPE())
// {
// case NORMAL:
// break;
// case XL_IS:
// num_st = 3; // hard-coded to 3, sigh...
// break;
// case XL_CLAN:
// num_st = 2; // hard-coded to 2, sigh...
// break;
// }
//
// for(int i = 0;i < num_st;++i) // hard-coded to 6, sigh...
// {
// hit_location_list.add(MechDesign.HIT_LOCATION.LEFT_TORSO);
// hit_location_list.add(MechDesign.HIT_LOCATION.RIGHT_TORSO);
// }
//
// return hit_location_list;
// }
// }
/*
 * public final void AddCriticalSlotsTo(final battletech.mech.CenterTorso i_center_torso) throws battletech.Exception {
 * switch(getTYPE()) { case NORMAL: case XL_IS: case XL_CLAN: // NORMAL and XL both occupy 6 slots in the Center Torso
 * for (int i = 0;i < 6;++i) i_center_torso.AddCriticalSlot(this); break; } }
 * 
 * public final void AddCriticalSlotsTo(final battletech.mech.SideTorso i_side_torso) throws battletech.Exception {
 * switch(getTYPE()) { case NORMAL: break; case XL_IS: for (int i = 0;i < 3;++i) i_side_torso.AddCriticalSlot(this);
 * break; case XL_CLAN: for (int i = 0;i < 2;++i) i_side_torso.AddCriticalSlot(this); break; } }
 */
